#ifndef IDATAMANAGER_H
#define IDATAMANAGER_H


#include "inotify.h"

struct AttrConfig{
    QString msCh;
    QString msEn;
    QString msDataMode;
    QString mDefaultValue;
    int mUseFlag;// 1表示使用，0表示未使用，2表示必须使用，如果没有可自动添加
};

class QString;
class HObject;
class IDataManager
{
public:
    ///> 注册指定业务数据类型的数据变化通知
    virtual void registNotify(INotify* notify) = 0;

    ///> 获取指定类型的数据对象
    virtual HObject* getDataObject(const QString& id) = 0;

    virtual QVector<HObject*> getDataObjects(const QString& dataType) = 0;

    virtual bool removeDataObject(const QString& id) = 0;

    // 设置当前对象，可理解为激活
    virtual bool setCurrentDataObject(HObject* pItem) = 0;
    virtual HObject* getCurrentObject() = 0;

    /**
     * @brief addDataObject 添加对象的类型必须是配置中包含的类型，否则添加会失败
     * @param dataType
     * @param graType
     * @param autoAddChildtrue,将自动添加子类中有且仅有一个的对象
     * @return
     */
    virtual HObject* addDataObject(const QString& dataType,const QString& graType = "",bool autoAddChild = true) = 0;

    virtual void dataChanged(HObject* pDataItem) = 0;

    // 指定类型数据对象建议配置的应用属性，需要应用软件设定才会配置
    virtual QVector<AttrConfig> getDataObjectConfigAttrs(const QString& dataType) = 0;
};

#endif // IDATAMANAGER_H
